package com.blazegame.logging.log4j;

import org.apache.log4j.Level;

import com.blazegame.logging.Logger;
import com.blazegame.logging.LoggerUtils;

/**
 * Simple logger that delegates to log4j
 */
public class Log4jLogger implements Logger {

	private org.apache.log4j.Logger log;

	public Log4jLogger(org.apache.log4j.Logger log) {
		this.log = log;
	}

	public void error(String msg, String... args) {
		if (isErrorEnabled()) {
			log.error(LoggerUtils.format(msg, args));
		}
	}

	public void error(String msg, Throwable ex, String... args) {
		if (isErrorEnabled()) {
			log.error(LoggerUtils.format(msg, args), ex);
		}
	}

	public void info(String msg, String... args) {
		if (isInfoEnabled()) {
			log.info(LoggerUtils.format(msg, args));
		}
	}

	public void info(String msg, Throwable ex, String... args) {
		if (isInfoEnabled()) {
			log.info(LoggerUtils.format(msg, args), ex);
		}
	}

	public boolean isInfoEnabled() {
		return log.isInfoEnabled();
	}

	public void warn(String msg, String... args) {
		if (isWarnEnabled()) {
			log.warn(LoggerUtils.format(msg, args));
		}
	}

	public void warn(String msg, Throwable ex, String... args) {
		if (isWarnEnabled()) {
			log.warn(LoggerUtils.format(msg, args), ex);
		}
	}

	public boolean isDebugEnabled() {
		return log.isDebugEnabled();
	}

	public void debug(String msg, String... args) {
		if (isDebugEnabled()) {

			log.debug(LoggerUtils.format(msg, args));
		}
	}

	public void debug(String msg, Throwable ex, String... args) {
		if (isDebugEnabled()) {
			log.debug(LoggerUtils.format(msg, args), ex);
		}
	}

	public boolean isTraceEnabled() {
		return log.isTraceEnabled();
	}

	public void trace(String msg, String... args) {
		if (isTraceEnabled()) {
			log.trace(LoggerUtils.format(msg, args));
		}
	}

	public void trace(String msg, Throwable ex, String... args) {
		if (isTraceEnabled()) {
			log.trace(LoggerUtils.format(msg, args), ex);
		}
	}

	public void fatal(String msg, String... args) {
		log.fatal(LoggerUtils.format(msg, args));
	}

	public void fatal(String msg, Throwable ex, String... args) {
		log.fatal(LoggerUtils.format(msg, args), ex);
	}

	@Override
	public boolean isWarnEnabled() {
		return log.isEnabledFor(Level.WARN);
	}

	@Override
	public boolean isErrorEnabled() {
		return log.isEnabledFor(Level.ERROR);
	}

}
